package team.freeroom.hotelmanage;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import team.freeroom.hotelmanage.config.ApplicationConfig;
import team.freeroom.hotelmanage.config.WebConfig;
import javax.servlet.Filter;


/**
 * WebApplicationContext 和 DispatcherServlet 上下文初始化
 *
 * java配置: 在 servlet 3.0 环境中,
 * web容器会在类路径中查找实现了javax.servlet.ServletContainerInitializer接口的类,
 * 如果能找到此类就会用它来配置Servlet容器.
 *
 * Spring 提供了这个接口的实现，名为 SpringServletContainerInitializer，
 *  * 这个类又会查找实现了 WebApplicationInitializer 接口的类。
 *
 * Spring 3.2引入了一个 WebApplicationInitializer 的一个便利的基础实现类 AbstractAnnotationConfigDispatcherServletInitializer.
 * 它会创建 DispatcherServleContext 和 RootContext，现在只需扩展它即可。
 */
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        // 根配置类
        return new Class[]{ApplicationConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // SpringMVC 的 DispatcherServlet 配置类
        return new Class[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        // Servlet 映射路径是 / (所有路径)
        return new String[]{"/"};
    }

    /**
     * 添加过滤器, 解决中文乱码问题
     */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return new Filter[]{characterEncodingFilter};
    }
}
